import numpy as np
import json
import pickle
import plotly.graph_objects as go
import plotly.io as pio
import pandas as pd
import itertools
from matplotlib import path
import numpy as np
import os
from matplotlib import path
import json
geoData=json.load(open('bezirksgrenzen.geojson'))
regionsPDict={}
for i in range(len(geoData['features'])):
tmpDf=pd.DataFrame(data=geoData['features'][i]['geometry']['coordinates'][0][0],columns=['lon','lat'])
region_id=int(geoData['features'][i]['properties']['Gemeinde_schluessel'])
tmpDf['region_id']=region_id
tmpDf['region_name']=geoData['features'][i]['properties']['Gemeinde_name']
if i==0:
regionsDF=tmpDf
else:
regionsDF=pd.concat([regionsDF,tmpDf])
regionsPDict[region_id]=path.Path(geoData['features'][i]['geometry']['coordinates'][0][0])
regions=regionsDF.groupby('region_id').mean()
connectivityG=np.load('berlin/connectivityG.npy')
for i in range(connectivityG.shape[0]):
for j in range(i+1,connectivityG.shape[0]):
connectivityG[j,i]=connectivityG[i,j]
conArgSort=connectivityG.argsort(axis=1)
#print(conArgSort)
graphD={i+1:row[-3:-1]+1 for i,row in enumerate(conArgSort)}
graphV={i+1:connectivityG[i,row[-3:-1]] for i,row in enumerate(conArgSort)}
maxEdge=max([max(graphV[k]) for k in graphD.keys()])
minEdge=min([min(graphV[k]) for k in graphD.keys() if k!=3])
scaleD=maxEdge-minEdge
lineLon=[]
lineLat=[]
lineL={}
for i in range(1,13):
lineL[i]=[]
for k,j in enumerate(graphD[i]):
lineL[i].append([[regions.loc[i,'lon'],regions.loc[j,'lon']],
[regions.loc[i,'lat'],regions.loc[j,'lat']],
(graphV[i][k]-minEdge)/scaleD])
#print(i,k,j,(graphV[i][k]-minEdge)/scaleD)
mapbox_access_token="pk.eyJ1IjoibWRraGF0YW1pIiwiYSI6ImNqc2Q3MDBlZzBjdTYzeXRsbmtuN2JmYTAifQ.DmiQnVUdDKAV2G2uZppE3g"
lat=regionsDF.lat.mean()
lon=regionsDF.lon.mean()
jelbiArr=[[52.499258, 13.407773],
[52.554145, 13.416526],
[52.544389, 13.295859],
[52.529869, 13.449394],
[52.453640, 13.385650]]
jelbi=pd.DataFrame(jelbiArr,columns=['lat','lon'])
fig = go.Figure()
fig.add_trace(go.Scattermapbox(
lat=regionsDF['lat'],
lon=regionsDF['lon'],
text=regionsDF['region_id'],
mode='markers',
marker=go.scattermapbox.Marker(size=3),
name='Regions polygon'))
fig.add_trace(go.Scattermapbox(
lat=regions['lat'],
lon=regions['lon'],
mode='markers',
marker=go.scattermapbox.Marker(size=10),
name='Center of regions'))
fig.add_trace(go.Scattermapbox(
lat=jelbi['lat'],
lon=jelbi['lon'],
mode='markers',
marker=go.scattermapbox.Marker(size=10),
name='Jelbi stations'))
for i in range(1,13):
if i!=3:
for k in [0,1]:
if lineL[i][k][2]<0.4:
linewidth=2
elif lineL[i][k][2]<0.6:
linewidth=4
else:
linewidth=6
fig.add_trace(go.Scattermapbox(
mode = "lines",
lon = lineL[i][k][0],
lat = lineL[i][k][1],
line=dict(color='red',width=linewidth)))
fig.update_layout(
showlegend=False,
hovermode='closest',
dragmode='zoom',
height=1500,
mapbox=go.layout.Mapbox(
accesstoken=mapbox_access_token,
bearing=0,
center=go.layout.mapbox.Center(
lat=lat,
lon=lon
),
pitch=0,
zoom=10
)
)
fig.show()